package edu.buu.refectory.domain;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * 购物车
 * 包含：包含合计，还包含多个购物项
 * 还想包含一个方法：把商品存入到购物车中
 * @author rt
 */
public class Cart {
	
	// 合计
	private double total;
	// 包含多个购物项（map集合就是用来存储购物项的（其实存储购买的图书的））  <c:forEach  var="entry" items="${sessionScope.cart.map}" >
	private Map<Integer, CartItem> map = new HashMap<Integer, CartItem>();
	
	public double getTotal() {
		return total;
	}
	public void setTotal(double total) {
		this.total = total;
	}
	public Map<Integer, CartItem> getMap() {
		return map;
	}
	public void setMap(Map<Integer, CartItem> map) {
		this.map = map;
	}
	
	/**
	 * cartItems 也是Cart一个属性
	 * <c:forEach  var="cartItem" items="${sessionScope.cart.cartItems}" >
	 * ${cartItem.product.name}
	 * @return
	 */
/*	public Collection<CartItem> getCartItems(){
		// 返回map的value的值
		return map.values();
	}
	*/
	/**
	 * 添加购物项的方法
	 * 先判断map集合中是否已经包含该购物项
	 * 如果包含
	 * 	* 如果包含：在原来的数量+1，
	 * 如果不包含
	 * 	* 如果不包含，直接把购物项存入到map集合中，
	 * 
	 * 处理合计的问题。
	 */
	public void addCart(CartItem item){
		// map.t(item.getProduct().getId(), item);
		// 先获取到上商品的id
		Integer pid = item.getFood().getfId();
		// 先判断，map中是否包含该商品
		if(map.containsKey(pid)){
			// 说明，map中包含该购物项的
			// 目的：数量+1
			CartItem hisItem = map.get(pid);
			// 更新历史的购物项的数量
			hisItem.setCount(hisItem.getCount()+item.getCount());
		}else{
			// 说明不包含购物项
			map.put(pid, item);
		}
		// 处理合计	
		total += item.getSubtotal();
	}
	
	/**
	 * 点击+号，更新商品的数量，更新合计
	 * @param id
	 * @param count
	 */
	public void addProduct(String id,int count){
		// 有id，通过id先获取到购物项
		CartItem item = map.get(id);
		// 处理，库存的问题
		// 先获取到库存的数量
		int pnum = item.getFood().getfNum();
		// 如果count已经>=10说明，数量已经达到库存的最大值
		if(count > pnum){
			// count = pnum;
			return;
		}
		// 更新商品的数量
		item.setCount(count);
		// 处理合计
		total += item.getFood().getfPrice();
	}
	
	/**
	 * 点击-号，更新数量
	 * @param id
	 * @param count
	 */
	public void deleteProduct(String id,int count){
		// 先获取到购物项
		CartItem item = map.get(id);
		// 获取到数量
		if(count == 0){
			// 移除购物项
			map.remove(id);
			// 处理合计的问题
			total -= item.getSubtotal();
		}else{
			item.setCount(count);
			total -= item.getFood().getfPrice();
		}
		
	}

}




